package com.example.gradu.graduationproject.controller;

import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 从指定的文件夹中获取并返回图片资源，目前仅用于头像存储功能
 */

@RestController
public class imageController {
    // {filename:.+} 表示匹配任意文件名（包含.扩展名）
    @GetMapping("/image/{filename:.+}")
    public ResponseEntity<Resource> getImage(@PathVariable String filename) {
        try {
            // 构造图片的完整路径：将文件名拼接到图片上传的根路径后
            Path imagePath = Paths.get("E:/GraduationProject/upload/").resolve(filename);
            if (!Files.exists(imagePath)) {
                // 文件不存在时
                return ResponseEntity.notFound().build();
            }
            // 将路径转换为 Spring 的资源对象，便于返回
            Resource resource = new UrlResource(imagePath.toUri());
            // 获取文件的 MIME 类型（例如 image/png、image/jpeg）
            String contentType = Files.probeContentType(imagePath);
            // 返回响应：
            // - 200 OK
            // - Content-Type 根据文件类型自动设置
            // - Body 为资源内容（图片字节流）
            return ResponseEntity.ok()
                    .contentType(MediaType.parseMediaType(contentType != null ? contentType : "application/octet-stream"))
                    .body(resource);
        } catch (Exception e) {
            // 发生异常时，返回 500 服务器错误
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }

}
